#ifndef CAMERAMIDDLEWIDGET_H
#define CAMERAMIDDLEWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QComboBox>
#include <QHBoxLayout>
#include <QCameraViewfinder>
#include <QCameraInfo>
#include <QtWidgets>

#include "ui/QSS/GlobalQss.h"
#include "ENUM/enum.h"
#include "DebugPrint/myDebugPrint.h"
#include "ui/optionWidget/optionsItem/optionItemMiddleWidget/MiddleWidgetVirtual.h"

/*
 * optionWidget中相机Item的中心部件
 * 所有MiddleWidget子类必须实现RFixedHeight方法
 */
class cameraMiddleWidget : public MiddleWidgetVirtual
{
    Q_OBJECT
public:
    explicit cameraMiddleWidget(QWidget *parent = nullptr);
    int RFixedHeight() override;
    int fixedWidth(ParameterKind kind = ParameterKind::Get, int widget = 0) override;
    bool setPaletteBF(const QPalette& palette) override;
    void LanguageInit() override;
private:
    QComboBox *cameraKindComboBox;          // 相机种类的选择
    QPushButton *openBtn;                   // 打开相机按钮
    QPushButton *flushBtn;                  // 刷新按钮
    QPushButton *infoBtn;                   // 信息按钮
    QHBoxLayout *HLayout;                   // 水平布局
    QList<QCameraInfo> cameras;             // 获取当前摄像头类型
    bool ItemIsTarck = false;               // 用于判断物体是否需要追踪
    int FixedHeight = 40;
    int FixedWidth = 300;
signals:
    void cameraCheck(const QString&);       // 当用户更改使用摄像头时进行处理
    void flushCamera();                     // 刷新链接摄像头设备
    void ItemTrack(bool track);             // 物品追踪
private slots:
    void openCameraBtn();                   // 打开按钮槽函数
    void senderCameraCheck(int );           // 用于获取对应摄像头的名称并通过cameraCheck信号发送出去
    void senderFlushCamera();               // 执行刷新按钮并发送flushCamera信号
};

#endif // CAMERAMIDDLEWIDGET_H
